package cn.iocoder.yudao.module.system.service.useractivity;

import cn.iocoder.yudao.module.system.event.UserActivityEvent;

/**
 * 用户活动记录服务接口
 * 
 * @author 系统开发团队
 */
public interface UserActivityRecordService {

    /**
     * 记录用户登录活动
     * 
     * @param userId 用户ID
     * @param username 用户名
     * @param userType 用户类型
     * @param clientIp 客户端IP
     * @param userAgent 用户代理
     * @param deviceType 设备类型
     */
    void recordLoginActivity(Long userId, String username, Integer userType, 
                           String clientIp, String userAgent, Integer deviceType);

    /**
     * 记录页面访问活动
     * 
     * @param userId 用户ID
     * @param username 用户名
     * @param userType 用户类型
     * @param requestUri 请求URI
     * @param clientIp 客户端IP
     * @param userAgent 用户代理
     * @param deviceType 设备类型
     */
    void recordPageViewActivity(Long userId, String username, Integer userType, 
                              String requestUri, String clientIp, String userAgent, Integer deviceType);

    /**
     * 记录API调用活动
     * 
     * @param userId 用户ID
     * @param username 用户名
     * @param userType 用户类型
     * @param requestUri 请求URI
     * @param requestMethod 请求方法
     * @param clientIp 客户端IP
     * @param userAgent 用户代理
     * @param deviceType 设备类型
     */
    void recordApiCallActivity(Long userId, String username, Integer userType, 
                             String requestUri, String requestMethod, 
                             String clientIp, String userAgent, Integer deviceType);

    /**
     * 记录功能使用活动
     * 
     * @param userId 用户ID
     * @param username 用户名
     * @param userType 用户类型
     * @param featureName 功能名称
     * @param clientIp 客户端IP
     * @param userAgent 用户代理
     * @param deviceType 设备类型
     */
    void recordFeatureUseActivity(Long userId, String username, Integer userType, 
                                String featureName, String clientIp, String userAgent, Integer deviceType);

    /**
     * 发布用户活动事件
     * 
     * @param event 用户活动事件
     */
    void publishUserActivityEvent(UserActivityEvent event);

    /**
     * 根据User-Agent判断设备类型
     * 
     * @param userAgent 用户代理字符串
     * @return 设备类型
     */
    Integer getDeviceTypeFromUserAgent(String userAgent);
}